package com.xyj.week02;

import java.util.*;

public class T1 {
    public static void main(String[] args) {
        T1 t1 = new T1();
        System.out.println("初始数据结构为"+t1);
        System.out.println(t1.insert(1));
//        System.out.println(t1.insert(2));
//        System.out.println("插入两个值之后数据结构为: "+t1);
        System.out.println(t1.remove(1));
        System.out.println("删除一个值之后数据结构为："+t1);
    }
    public T1(){
        this.list= new ArrayList<>();
        this.valToIndex=new HashMap<>();
    }

    @Override
    public String toString() {
        return "Hash表为："+this.valToIndex.toString()
                +"\n 数组为："+this.list.toString();
    }

    public ArrayList<Integer> list;

    public HashMap<Integer,Integer> valToIndex;


    /**
     * 添加一个元素
     * @param num 元素
     * @return 是否添加成功
     */
    public Boolean insert(Integer num){
        if (valToIndex.containsKey(num)){
            return false;
        }
        valToIndex.put(num,list.size());
        list.add(num);
        return true;
    }

    /**
     * 删除一个元素
     * @param num 元素
     * @return 是否删除成功
     */
    public Boolean remove (Integer num){
        //如果这个元素不存在  删除失败
        if (!valToIndex.containsKey(num)){
            return false;
        }
        //元素存在的话 获取这个元素的索引，
        //将最后一个索引处的元素和这个元素交换  然后删除这个元素
        Integer index = valToIndex.get(num);
        Integer lastNum = list.get(list.size()-1);
        list.set(index,lastNum);
        //维护索引
        valToIndex.put(lastNum,index);
        valToIndex.remove(num);
        list.remove(list.size()-1);
        return true;
    }

    /**
     * 随机获取一个元素
     */
    public Integer removeRandomOne (){
        Random random = new Random();
        return list.get(random.nextInt(list.size()));
    }




}
